// 手机号格式正则
var phone_reg = /(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])\d{8}/;

/**
 * 本地验证手机号
 * @param phone
 * @returns
 */
function validatePhone(phone) {
	return phone_reg.test(phone);
}
/**
 * 本地验证验证码
 * @param code
 * @returns
 */
function validateCode(code) {
	return /\d{4}/.test(code);
}

/**
 * 几乎都要调用，提取到通用页面里
 * @param option
 */
var doingAjax = false;
function doAjax(option) {
	if (doingAjax)
		return;
	doingAjax = true;
	var defaultOption = {
		type: 'post',
		dataType: 'json',
//		contentType:"application/json",
		success: function(data){
			doingAjax = false;
		},
		error: function(data){
			doingAjax = false;
		}
	};
	if (option) {
		if (option.success) {
			defaultOption.diySuccess = option.success;
			option.success = function(data) {
				doingAjax = false;
				defaultOption.diySuccess(data);
			};
		}
		if (option.error) {
			defaultOption.diyError = option.error;
			option.error = function(data) {
				doingAjax = false;
				defaultOption.diyError(data);
			};
		}
		option = $.extend(defaultOption, option);
	}
	$.ajax(option);
}
/**
 * 重定向地址
 * @param url
 */
function redirect(url) {
	location.href = url;
}

/************************************ 组件方法 start *************************************/
/* 弹出覆盖层，callback为点击覆盖层的回调方法 */
var popupCover = function(callback, modal){
	var pop = $('<div class="full-screen-cover opacity-half"></div>');
	if (modal != "false" && modal != 0)
		pop.addClass("bg-black");
	//添加click事件，用去取消弹出层
	pop.click(function(){
		callback();
		$(this).remove();//去掉弹出层，注：this为当前弹出层
//		if ($(".full-screen-cover").size() == 0)
//			$("body").removeClass("no-scroll");
	});
	// 当有弹出层时，不能滚动
	$("body").append(pop);//.addClass("no-scroll");
	return pop;
};

var initStep = function(step) {
	var $step = $(step);
	var id = $step.attr("id");
	var stepText = eval($step.attr("data") || "[]");
	var option = eval("(" + ($step.attr("option") || "{}") + ")");
	var stepCurrIndex = -1;//-1为已完成
	if (undefined != $step.attr("currindex"))
		stepCurrIndex = parseInt($step.attr("currindex"));
	var callback = option.onclick || function(){ return true; };

	// 配置进行缓存
	$step.data("option", option);

	var html = [];
	for (var i = 0; i < stepText.length; i++) {
		html.push('<div index="'+ i +'"><span>' + stepText[i] + '</span></div>');
	}
	$step.html(html.join('<hr />'));

	$step.find("[index]").click(function(){
		var newIndex = $(this).attr("index");
		// 触发回调方法
		if (false == callback($step, $(".curr.step-" + id + "-" + $step.attr("currindex")), $(".step-" + id + "-" + newIndex), newIndex)) {
			return;
		}
		// 显示当前步骤
		$step.find("[index=" + newIndex + "]").addClass("curr").siblings().removeClass("curr");
		$("[class^='step-" + id + "']").hide().removeClass("curr").filter(".step-" + id + "-" + newIndex).show().addClass("curr");
		$step.attr("currindex", newIndex);
		$(window).scrollTop(0);//滚动到顶端
	});
	// 添加模拟对象绑定事件source="XXXX(id)_XX(index)"
	$("[source^='" + id + "-'] ").click(function(){
		var source = $(this).attr("source").split("-")[1];
		$step.find("[index=" + source + "]").click();
	});
	if (-1 == stepCurrIndex) {
		$("[class^='step-" + id + "']:last").show();// 先当完成显示，后面再根据实际情况自动触正确的显示
		$step.addClass("finish");// 如果-1，表示全部资料已补完整
	} else
		$step.find("[index=" + stepCurrIndex + "]").click();// 触发默认值

	return $step;
};

var initInputText = function(input) {
	var $input = $(input);
	var option = eval("(" + ($input.attr("option") || "{}") + ")");
	// 配置进行缓存
	$input.data("option", option);

	var required = option.required;
	$input.before('<label>' + (required ? '<font color="red">*</font>' : '') + $input.attr("placeholder") + ': </label>').removeAttr("placeholder");
};

var initSelect = function(select) {
	var $select = $(select),
		autoHeight = $select.hasClass("auto-height"),
		value = $select.attr("value"),
		defaultText = $select.attr("defaultText") || "";
	var option = eval("(" + ($select.attr("option") || "{modal:false}") + ")");
	var textField = option.textField || "name",
		valueField = option.valueField || "value",
		notnull = option.notnull || false,
		onLoadClick = undefined == option.onLoadClick ? true : option.onLoadClick,
		onselect = option.onselect || function(){};//自定义函数
	var hideOptions = function(){
		$select.find(">.options").hide();//隐藏下拉
	};

	// 配置进行缓存
	$select.data("option", option);

	var pop = null;
	$select.click(function(){
		//隐藏下拉的公共方法
		pop = popupCover(hideOptions, $select.attr("modal"));
		$select.find(">.options").show();//显示下拉
	});
	
	//生成提示文字的下拉的图标
	var textIcon = $('<div class="select-text">' + defaultText
			+ '</div><button class="select-icon absolute inline" onclick="return false;">V</button>');
	
	//生成下拉的选项
	var optionHtml = $('<ul class="options inline" style="display: none;"></ul>');
	var options = eval($select.attr("data") || "[]");
	var noneOp = eval("({" + textField + ":'" + (defaultText || "请选择") + "'," + valueField + ":''})");
	if (!notnull)
		options.splice(0, 0, noneOp);// 往第一个位置插入一个选项
	$(options).each(function(index){
		var option = $('<li class="input" value="' + this[valueField]  + '">'
				+ (autoHeight ? '<div class="midOp"><div class="innerOp">' + this[textField] + '</div></div>' : this[textField])
				+ '</li>');
		option.click(function(event){
			$select.find(".select-text").text(this.innerText);
			$select.prev().val($(this).attr("value"));
			hideOptions();//隐藏下拉
			if (pop) pop.click();//触发覆盖层的click事件来移除
			if (onselect) onselect($select, this);//触发自定义函数
			event.stopPropagation();// 下拉的click事件不冒泡
		});
		optionHtml.append(option);
	});
	
	//添加到.select中
	$select.append(textIcon).append(optionHtml).before('<input type="hidden" name="' + $select.attr("name") + '" />');
	
	// 初始化下拉值
	if (value && $select.find("li[value='" + value + "']").text()) {
		if (onLoadClick) {
			optionHtml.find("> li[value='" + value + "']").click();
		} else {
			$select.find(".select-text").text($select.find("li[value='" + value + "']").text());
			$select.prev().val(value);
		}
	} else if (onLoadClick) {
		optionHtml.find("> li:first").click();
	}
	
	return $select;
};
/* 重新加载数据 */
var iSelectReload = function($select, json) {
	$select.empty().prev().remove();//移除里面的内容
	$select.attr("data", json).unbind("click");//重新添加内容，去除click事件
	initSelect($select[0]);//重新初始化
};

/** 单选时无法取消选择 */
var initCheckbox = function(checkbox) {
	checkbox.type = "hidden";
	var $checkbox = $(checkbox),
		value = $checkbox.attr("value");
	var option = eval("(" + ($checkbox.attr("option") || "{modal:false}") + ")");
	var onLoadClick = undefined == option.onLoadClick ? true : option.onLoadClick;
	var selectValues = [];

	// 配置进行缓存
	$checkbox.data("option", option);

	var required = option.required;
	//生成下拉的选项
	var optionHtml = $('<ul class="options inline"><li>' + (required ? '<font color="red">*</font>' : '') + checkbox.placeholder + ': </li></ul>');
	var options = eval($checkbox.attr("data") || "[]");
	$(options).each(function(index){
		var option = $('<li><label><input type="checkbox" name="_' + $checkbox.attr("name") + '" value="' + this.value + '" />'
				+ this.text + '</label></li>');
		optionHtml.append(option);
	});

	// 绑定选中事件
	optionHtml.find("input:checkbox").click(function(){
		// 是否单选的点击事件
		if (true == option.singleSelect) {
			$(this).attr("checked", true);
			$(this).parents("li").siblings().find("input:checkbox").attr("checked", false);
		}

		// 重新赋值
		selectValues.splice(0, selectValues.length);
		optionHtml.find("input:checkbox:checked").each(function(){
			selectValues.push(this.value);
		});
		checkbox.value = selectValues.join(",");
	});
	//添加到checkbox后面
	$checkbox.after(optionHtml);

	// 初始化下拉值
	if (value.length) {
		$.each(value.split(","), function(){
			optionHtml.find("input[name='_" + $checkbox.attr("name") + "'][value=" + this + "]").parent().click();
		});
	} else if (onLoadClick) {
		optionHtml.find("> li:first > label").click();
	}

	return $checkbox;
};
///* 重新加载数据 */
//var iCheckboxReload = function($checkbox, json) {
//	$checkbox.empty().prev().remove();//移除里面的内容
//	$checkbox.attr("data", json).unbind("click");//重新添加内容，去除click事件
//	initSelect($checkbox[0]);//重新初始化
//};

var initSearch = function(input) {
	$input = $(input);
	$input.removeClass('search').wrap('<div class="search"></div>')
		.after('<button class="select-icon absolute inline"></button>');
	
	var option = eval("(" + ($input.attr("option") || "{}") + ")");
	if (option.click) {
		$input.siblings("button").click(option.click);
	}
};

/**
 * 分页查询
 * @param a
 * @param pageNo
 */
function pager(a, pageNo) {
	if ($(a).hasClass("disable"))
		return;

	var form = $(a).parents("form")[0];
	if (!form)
		return;

	form.pageNo.value = pageNo > 0 ? pageNo : 0;
	form.submit();
}
function validateForm($form) {
	if (!$form || $form.size() == 0)
		return false;

	var validateFlag = true;
	$form.find("input").each(function(){
		if ($(this).data("option") && $(this).data("option").required) {
			validateFlag = validateFlag && !!$.trim($(this).val()).length;
		}
	});
	return validateFlag;
}
/************************************ 组件方法 end *************************************/

$(function(){
	/* 初始化步骤 */
	$(".step[data]").each(function(){
		initStep(this);
	});

	/* 初始化下拉框 */
	$(".select[data]").each(function(){
		initSelect(this);
	});

	/* 初始化选择框 */
	$(".checkbox[data]").each(function(){
		initCheckbox(this);
	});

	/* 初始化搜索框 */
	$("input.search").each(function(){
		initSearch(this);
	});

	// 输入框架的提示文字组件
	$(".input[placeholder]:not([name='keywords'])").each(function(){
		initInputText(this);
	});

	// 与后台交互的alert组件
	if (alertMsg) {
		jAlert(alertMsg, function(){
			if (namespace)
				doAjax({url: namespace + "/clearAlert.htm"});
		});
	}
});